# 自定义Django文件存储类
from django.core.files.storage import Storage, FileSystemStorage
from django.conf import settings
from fdfs_client.client import Fdfs_client


class FDFSStorage(Storage):
    """FDFS文件存储类"""
    def _save(self, name, content):
        """
        name: 用户选择上传文件的名称 1.txt
        content: 包含用户上传文件内容的一个File对象，可以通过content.read()获取上传文件内容
        """
        # client = Fdfs_client('客户端配置文件路径')
        client = Fdfs_client(settings.FDFS_CLIENT_CONF)

        # 上传文件到FDFS文件存储系统
        res = client.upload_by_buffer(content.read())

        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到FDFS系统失败')

        # 获取文件ID
        file_id = res.get('Remote file_id')

        return file_id

    def exists(self, name):
        """
        判断用户上传的文件在文件存储系统中是否已经存在，防止文件同名
        name: 用户选择上传文件的名称 1.txt
        """
        return False

    def url(self, name):
        """
        获取可访问到文件的完整url路径:
        name: 数据表中图片字段保存的内容(文件id)
        """
        return settings.FDFS_URL + name

